﻿using System;
using System.Collections.Generic;
using System.Text;

namespace daSemanticAnalyser.SemanticTree
{
    using daBase.Objects;
    using daBase.Objects.Safe;
    using daSyntaxAnalyser.SyntaxTree;

    /// <summary>
    /// Программа
    /// </summary>
    public class ProgramSemanticElement : FileSemanticElement
    {
        private List<string> parameters;
        private CompoundStatementElement compuond;
        
        /// <summary>
        /// Параметры программы
        /// </summary>
        public List<string> Params { get { return parameters; } set { parameters = value; } }

        /// <summary>
        /// Основной блок кода программы
        /// </summary>
        public CompoundStatementElement Compound { get { return compuond; } set { compuond = value; } }

        /// <summary>
        /// Конструктор
        /// </summary>
        /// <param name="Name">имя элемента</param>
        /// <param name="Parent">родительский элемент</param>
        /// <param name="Params">параметры программы</param>
        /// <param name="Units">подключенные модули</param>
        /// <param name="Consts">константы</param>
        /// <param name="Resourcestrings">строковые ресурсы</param>
        /// <param name="Types">типы</param>
        /// <param name="Vars">переменные</param>
        /// <param name="Threadvars">потоковые переменные</param>
        /// <param name="Methods">методы</param>
        /// <param name="Compound">основной блок кода программы</param>
        /// <param name="SyntaxElement">соответствующий элемент синтаксического дерева</param>
        public ProgramSemanticElement(string Name, IChildSemanticElement Parent, List<string> Params, List<UnitSemanticElement> Units, List<ConstSemanticElement> Consts, List<ResourceStringSemanticElement> Resourcestrings, List<CommonTypeSemanticElement> Types, List<VarSemanticElement> Vars, List<ThreadvarSemanticElement> Threadvars, List<MethodSemanticElement> Methods, CompoundStatementElement Compound, ISyntaxTreeElement SyntaxElement)
            : base(Name, Parent, Units, Consts, Resourcestrings, Types, Vars, Threadvars, Methods, SyntaxElement)
        {
            parameters = (Params == null) ? new List<string>() : Params;
            compuond = Compound;
        }
    }
}
